package com.ybl.store.common.convention.errorcode;

/**
 * 基础错误码
 */
public enum BaseErrorCode {

    // ========== 一级宏观错误码 客户端错误 ==========
    CLIENT_ERROR("A000001", "用户端错误"),
    CLIENT_UNAUTHORIZED_ERROR("A000002", "用户端无权限"),

    // ========== 二级宏观错误码 登录错误 ==========
    USER_NULL_ERROR("A000100", "用户不存在"),
    USER_LOGIN_ERROR("A000101", "用户名或密码错误"),

    // ========== 二级宏观错误码 分店错误 ==========
    STORE_SAVE_ERROR("A000200", "新增分店失败"),
    STORE_DELETE_ERROR("A000201", "删除分店失败"),
    STORE_UPDATE_ERROR("A000202", "修改分店失败"),
    STORE_NULL_ERROR("A000203", "分店不存在"),
    STORE_BAN_ERROR("A000204", "禁用分店失败"),

    // ========== 二级宏观错误码 店长错误 ==========
    MANAGER_SAVE_ERROR("A000300", "新增店长失败"),
    MANAGER_DELETE_ERROR("A000301", "删除店长失败"),
    MANAGER_UPDATE_ERROR("A000302", "修改店长失败"),
    MANAGER_NULL_ERROR("A000303", "店长不存在"),
    MANAGER_BAN_ERROR("A000304", "禁用店长失败"),

    // ========== 二级宏观错误码 店员错误 ==========
    CLERK_SAVE_ERROR("A000400", "新增店员失败"),
    CLERK_DELETE_ERROR("A000401", "删除店员失败"),
    CLERK_UPDATE_ERROR("A000402", "修改店员失败"),
    CLERK_NULL_ERROR("A000403", "店员不存在"),
    CLERK_BAN_ERROR("A000404", "禁用店员失败"),

    // ========== 二级宏观错误码 顾客错误 ==========
    CUSTOMER_SAVE_ERROR("A000500", "新增顾客失败"),
    CUSTOMER_DELETE_ERROR("A000501", "删除顾客失败"),
    CUSTOMER_UPDATE_ERROR("A000502", "修改顾客失败"),
    CUSTOMER_NULL_ERROR("A000503", "顾客不存在"),
    CUSTOMER_BAN_ERROR("A000504", "禁用顾客失败"),

    // ========== 二级宏观错误码 商品错误 ==========
    PRODUCT_SAVE_ERROR("A000600", "新增货品失败"),
    PRODUCT_DELETE_ERROR("A000601", "删除货品失败"),
    PRODUCT_UPDATE_ERROR("A000602", "修改货品失败"),
    PRODUCT_NULL_ERROR("A000603", "货品不存在"),
    PRODUCT_BAN_ERROR("A000604", "禁用货品失败"),

    // ========== 二级宏观错误码 赠品错误 ==========
    GIFT_SAVE_ERROR("A000700", "新增赠品失败"),
    GIFT_DELETE_ERROR("A000701", "删除赠品失败"),
    GIFT_UPDATE_ERROR("A000702", "修改赠品失败"),
    GIFT_NULL_ERROR("A000703", "赠品不存在"),
    GIFT_BAN_ERROR("A000703", "禁用赠品失败"),

    // ========== 二级宏观错误码 分店错误 ==========
    STORE_GOOD_SAVE_ERROR("A000800", "新增分店商品失败"),
    STORE_GOOD_DELETE_ERROR("A000801", "删除分店商品失败"),
    STORE_GOOD_UPDATE_ERROR("A000802", "修改分店商品失败"),
    STORE_GOOD_NULL_ERROR("A000803", "分店商品不存在"),

    // ========== 二级宏观错误码 商品交易错误 ==========
    DEAL_PRODUCT_SAVE_ERROR("A000900", "新增货品订单失败"),
    DEAL_PRODUCT_DELETE_ERROR("A000901", "删除货品订单交易失败"),
    DEAL_PRODUCT_UPDATE_ERROR("A000902", "修改货品订单失败"),
    DEAL_PRODUCT_NULL_ERROR("A000903", "货品订单不存在"),
    DEAL_PRODUCT_NUMBER_ERROR("A000904", "货品订单数量错误"),
    DEAL_PRODUCT_PAYMENT_ERROR("A000905", "货品订单金额错误"),
    DEAL_PRODUCT_CANNOT_DELETE_ERROR("A000906", "存在订单交易记录，无法删除货品交易"),

    // ========== 二级宏观错误码 商品交易记录错误 ==========
    LOG_DEAL_PRODUCT_SAVE_ERROR("A001000", "新增商品交易失败"),
    LOG_DEAL_PRODUCT_DELETE_ERROR("A001001", "删除商品交易失败"),
    LOG_DEAL_PRODUCT_UPDATE_ERROR("A001002", "修改商品交易失败"),
    LOG_DEAL_PRODUCT_NULL_ERROR("A001003", "商品交易不存在"),
    LOG_DEAL_PRODUCT_NUMBER_ERROR("A001004", "商品交易数量超出订单未交付数量"),
    LOG_DEAL_PRODUCT_PAYMENT_ERROR("A001005", "商品交易金额超出订单未支付金额"),

    // ========== 二级宏观错误码 小程序错误 ==========
    MP_PHONE_EXIST_ERROR("A001100", "手机号已存在"),
    MP_OPENID_EXIST_ERROR("A001101", "openid 已注册"),
    MP_OPENID_NULL_ERROR("A001102", null),
    MP_OPENID_REGISTER_ERROR("A001103", "请注册"),

    // ========== 二级宏观错误码 卡券错误 ==========
    VOUCHER_SAVE_ERROR("A001200", "新增卡券失败"),
    VOUCHER_DELETE_ERROR("A001201", "删除卡券失败"),
    VOUCHER_UPDATE_ERROR("A001202", "修改卡券失败"),
    VOUCHER_NULL_ERROR("A001203", "卡券不存在"),
    VOUCHER_BAN_ERROR("A001204", "禁用卡券失败"),
    VOUCHER_NUMBER_ERROR("A001205", "卡券编号错误"),
    VOUCHER_USAGE_ERROR("A001206", "卡券编号已被使用"),
    VOUCHER_DISTRIBUTION_ERROR("A001207", "卡券编号已被分发"),
//    VOUCHER_AUTHORIZE_ERROR("A001208","该用户未拥有该卡券"),
    // ========== 二级宏观错误码 顾客物品错误 ==========
    CUSTOMER_GOOD_ERROR("A001300", "顾客商品信息更新失败"),
    CUSTOMER_GIFT_ERROR("A001301", "顾客赠品信息更新失败"),
    CUSTOMER_VOUCHER_ERROR("A001302", "顾客卡券信息更新失败"),

    // ========== 二级宏观错误码 顾客卡券错误 ==========
    CUSTOMER_VOUCHER_SAVE_ERROR("A001400", "新增顾客卡券失败"),
    CUSTOMER_VOUCHER_DELETE_ERROR("A001401", "删除顾客卡券失败"),
    CUSTOMER_VOUCHER_UPDATE_ERROR("A001402", "修改顾客卡券失败"),
    CUSTOMER_VOUCHER_NULL_ERROR("A001403", "顾客卡券不存在"),
    CUSTOMER_VOUCHER_BAN_ERROR("A001404", "禁用顾客卡券失败"),

    // ========== 二级宏观错误码 赠品交易错误 ==========
    DEAL_GIFT_SAVE_ERROR("A001500", "新增赠品失败"),
    DEAL_GIFT_DELETE_ERROR("A001501", "删除赠品交易失败"),
    DEAL_GIFT_UPDATE_ERROR("A001502", "修改赠品交易失败"),
    DEAL_GIFT_NULL_ERROR("A001503", "赠品交易不存在"),

    // ========== 二级宏观错误码 赠品交易错误 ==========
    DEAL_VOUCHER_SAVE_ERROR("A001600", "新增卡券失败"),
    DEAL_VOUCHER_DELETE_ERROR("A001601", "删除卡券交易失败"),
    DEAL_VOUCHER_UPDATE_ERROR("A001602", "修改卡券交易失败"),
    DEAL_VOUCHER_NULL_ERROR("A001603", "卡券不存在"),

    // ========== 二级宏观错误码 记录错误 ==========
    LOG_SAVE_ERROR("A001700", "新增记录失败"),
    LOG_DELETE_ERROR("A001701", "删除记录失败"),
    LOG_UPDATE_ERROR("A001702", "修改记录失败"),
    LOG_NULL_ERROR("A001703", "记录不存在"),
    LOG_RELATIVE_ERROR("A001704", "记录由订单自动生成，不可编辑"),

    // ========== 二级宏观错误码 审核错误 ==========
    REVIEW_ERROR("A001700", "审核未通过，无法操作"),

    // ========== 一级宏观错误码 系统执行出错 ==========
    SERVER_ERROR("B000001", "系统执行出错"),
    EXCEL_ERROR("B000002", "Excel 生成失败"),

    // ========== 一级宏观错误码 调用第三方服务出错 ==========
    REMOTE_ERROR("C000001", "调用第三方服务出错");

    /**
     * 错误码
     */
    private final String code;

    /**
     * 错误信息
     */
    private final String message;

    BaseErrorCode(String code, String message) {
        this.code = code;
        this.message = message;
    }

    public String code() {
        return code;
    }

    public String message() {
        return message;
    }
}
